const userModel = require('../models/User');
const bcrypt = require('bcryptjs');

// 创建新用户
const createUser = async (req, res) => {
    try {
        const { username, password, role = 'user' } = req.body;

        // 验证必填字段
        if (!username || !password) {
            return res.status(400).json({ message: '用户名和密码为必填项' });
        }

        // 验证角色
        if (role && !['user', 'admin'].includes(role)) {
            return res.status(400).json({ message: '无效的用户角色' });
        }

        // 检查用户名是否已存在
        const existingUser = await userModel.getUserByUsername(username);
        if (existingUser) {
            return res.status(400).json({ message: '用户名已存在' });
        }

        // 加密密码
        const hashedPassword = await bcrypt.hash(password, 10);

        // 创建用户
        const userId = await userModel.createUser({
            username,
            password: hashedPassword,
            role
        });

        // 获取新创建的用户信息
        const newUser = await userModel.getUserById(userId);

        res.status(201).json({ 
            message: '用户创建成功',
            user: {
                id: newUser.id,
                username: newUser.username,
                role: newUser.role,
                created_at: newUser.created_at
            }
        });
    } catch (error) {
        console.error('创建用户错误:', error);
        res.status(500).json({ message: error.message || '服务器错误' });
    }
};

// 用户登录
const loginUser = async (req, res) => {
    try {
        const { username, password } = req.body;
        const user = await userModel.getUserByUsername(username);
        if (!user) {
            return res.status(404).json({ message: '用户不存在' });
        }

        const isValidPassword = await bcrypt.compare(password, user.password);
        if (!isValidPassword) {
            return res.status(401).json({ message: '密码错误' });
        }

        res.status(200).json({ 
            id: user.id, 
            username: user.username,
            email: user.email,
            role: user.role,
            status: user.status
        });
    } catch (error) {
        console.error('登录错误:', error);
        res.status(500).json({ message: error.message || '服务器错误' });
    }
};

// 获取所有用户
const getAllUsers = async (req, res) => {
    try {
        const users = await userModel.getAllUsers();
        res.json(users);
    } catch (error) {
        console.error('获取用户列表错误:', error);
        res.status(500).json({ message: error.message || '服务器错误' });
    }
};

// 更新用户信息
const updateUser = async (req, res) => {
    try {
        const { id } = req.params;
        const { username, email, password, role } = req.body;

        // 验证邮箱格式
        if (email) {
            const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
            if (!emailRegex.test(email)) {
                return res.status(400).json({ message: '邮箱格式不正确' });
            }
        }

        // 验证角色
        if (role && !['user', 'admin'].includes(role)) {
            return res.status(400).json({ message: '无效的用户角色' });
        }

        // 准备更新数据
        const updateData = { username, email, role };
        if (password) {
            updateData.password = await bcrypt.hash(password, 10);
        }

        const success = await userModel.updateUserById(id, updateData);
        if (!success) {
            return res.status(404).json({ message: '用户不存在' });
        }

        res.json({ message: '用户信息更新成功' });
    } catch (error) {
        console.error('更新用户信息错误:', error);
        res.status(500).json({ message: error.message || '服务器错误' });
    }
};

// 更新用户状态
const updateUserStatus = async (req, res) => {
    try {
        const { id } = req.params;
        const { status } = req.body;

        // 验证状态
        if (!['active', 'disabled'].includes(status)) {
            return res.status(400).json({ message: '无效的用户状态' });
        }

        const success = await userModel.updateUserStatus(id, status);
        if (!success) {
            return res.status(404).json({ message: '用户不存在' });
        }

        res.json({ message: '用户状态更新成功' });
    } catch (error) {
        console.error('更新用户状态错误:', error);
        res.status(500).json({ message: error.message || '服务器错误' });
    }
};

// 删除用户
const deleteUser = async (req, res) => {
    try {
        const { id } = req.params;
        const success = await userModel.deleteUserById(id);
        if (!success) {
            return res.status(404).json({ message: '用户不存在' });
        }
        res.json({ message: '用户删除成功' });
    } catch (error) {
        console.error('删除用户错误:', error);
        res.status(500).json({ message: error.message || '服务器错误' });
    }
};

module.exports = {
    createUser,
    loginUser,
    getAllUsers,
    updateUser,
    updateUserStatus,
    deleteUser
};